Jaeger
Jaeger - An Open Source and End-to-End Distributed Tracing System
Introduction
Jaeger, inspired by Dapper
and OpenZipkin
, is a distributed tracing system released as open source by Uber Technologies
. It is used for monitoring and troubleshooting microservices-based distributed systems, including:
- Distributed context propagation
- Distributed transaction monitoring
- Root cause analysis
- Service dependency analysis
- Performance / latency optimization
Problems That Jaeger Addresses
- Distributed transaction monitoring
- Performance and latency optimization
- Root cause analysis
- Service dependency analysis
- Distributed context propagation
Features
- OpenTracing compatible data model and instrumentation libraries in Go, Java, Node, Python, C++ and C#
- Uses consistent upfront sampling with individual per service/endpoint probabilities
- Multiple storage backends: Cassandra, Elasticsearch, memory
- System topology graphs
- Adaptive sampling
- Post-collection data processing pipeline
Why Jaeger ?
As on-the-ground microservice practitioners are quickly realizing, the majority of operational problems that arise when moving to a distributed architecture are ultimately grounded in two areas: networking and observability. It is simply an orders of magnitude larger problem to network and debug a set of intertwined distributed services versus a single monolithic application.
Terminology And Components
- Jaeger presents execution requests as
traces
. A trace shows the data/execution path through a system. - A trace is made up of one or more
spans
. A span is a logical unit of work in Jaeger. Each span includes the operation name, start time, and duration. Spans may be nested and ordered. - Jaeger includes several components that work together to collect, store and visualize spans and traces.
Jaeger Client
includes language-specific implementations of the OpenTracing API for distributed tracing. These can be used manually or with a variety of open source frameworks.Jaeger Agent
is a network daemon that listens for spans sent over User Datagram Protocol. The agent is meant to be placed on the same host as the instrumented application. This is usually implemented through a sidecar in container environments like Kubernetes.Jaeger Collector
receives spans and places them in a queue for processing.- Collectors require a persistent storage backend, so Jaeger also has a pluggable mechanism for span
storage
. Query
is a service that retrieves traces from storage.Jaeger Console
is a user interface that lets you visualize your distributed tracing data.
Client Libraries
All Jaeger client libraries support the OpenTracing APIs
. The following resources provide more information about instrumenting the application with OpenTracing:
- OpenTracing tutorials for Java, Go, Python, Node.js and C#
- A deep dive blog post Tracing HTTP request latency in Go
- The official OpenTracing documentation and other materials at opentracing.io
- The opentracing-contrib org on GitHub contains many repositories with off-the-shelf instrumentation for many popular frameworks, including JAXRS & Dropwizard (Java), Flask & Django (Python), Go std library, etc.
Supported Libraries
- Go
- Java
- Python
- Node.js
- C++
- C#
Deployment
- Kubernetes
- Frontend/UI
- CLI Flags
- Security
- On Windows
See Also :
- Official website: https://www.jaegertracing.io/
- For more details , refer documentation.